home *** CD-ROM | disk | FTP | other *** search
Oberon Document | 1995-08-09 | 8.0 KB | 237 lines | [oODC/obnF] |
- Documents.StdDocumentDesc
- Documents.DocumentDesc
- Containers.ViewDesc
- Views.ViewDesc
- Stores.StoreDesc
- Documents.ModelDesc
- Containers.ModelDesc
- Models.ModelDesc
- Stores.ElemDesc
- TextViews.StdViewDesc
- TextViews.ViewDesc
- TextModels.StdModelDesc
- TextModels.ModelDesc
- TextModels.AttributesDesc
- Helvetica
- Helvetica
- Helvetica
- StdStamps.StdViewDesc
- Helvetica
- Helvetica
- Helvetica
- MODULE NewViews;
- IMPORT Domains, Ports, Stores, Models, Views, Controllers, Properties, NewModels;
- CONST
- minVersion = 0; maxVersion = 0;
- TYPE
- View* = POINTER TO ViewDesc;
- ViewDesc* = RECORD (Views.ViewDesc) END;
- Directory* = POINTER TO DirectoryDesc;
- DirectoryDesc* = RECORD END;
- StdView = POINTER TO RECORD (ViewDesc)
- model: NewModels.Model;
- (* view fields *)
- END;
- StdDirectory = POINTER TO RECORD (DirectoryDesc) END;
- Op = POINTER TO RECORD (Domains.OperationDesc)
- view: StdView;
- (* view-operation fields *)
- END;
- VAR dir-, stdDir-: Directory;
- (** View **)
- PROCEDURE (v: View) Internalize* (VAR rd: Stores.Reader);
- VAR version: SHORTINT;
- BEGIN
- v.Internalize^(rd);
- IF ~rd.cancelled THEN
- rd.ReadVersion(minVersion, maxVersion, version)
- END
- END Internalize;
- PROCEDURE (v: View) Externalize* (VAR wr: Stores.Writer);
- BEGIN
- v.Externalize^(wr);
- wr.WriteVersion(maxVersion)
- END Externalize;
- PROCEDURE (v: View) ThisModel* (): NewModels.Model;
- BEGIN
- HALT(127)
- END ThisModel;
- (** Directory **)
- PROCEDURE (d: Directory) New* (m: NewModels.Model): View;
- BEGIN
- HALT(127)
- END New;
- (* Op *)
- PROCEDURE (op: Op) Do;
- BEGIN
- (* perform view operation *)
- Views.Update(op.view, Views.keepFrames) (* restore v in any frame that displays it *)
- END Do;
- PROCEDURE NewOp (view: View (* additional parameters *) ): Op;
- VAR op: Op;
- BEGIN
- ASSERT(view # NIL, 20);
- NEW(op);
- (* set up operation parameters *)
- RETURN op
- END NewOp;
- (* StdView *)
- PROCEDURE (v: StdView) Internalize (VAR rd: Stores.Reader);
- VAR version: SHORTINT; st: Stores.Store;
- BEGIN
- ASSERT(v.model = NIL, 20);
- v.Internalize^(rd);
- IF ~rd.cancelled THEN
- rd.ReadVersion(minVersion, maxVersion, version);
- IF ~rd.cancelled THEN
- rd.ReadStore(st);
- IF (st # NIL) & (st IS NewModels.Model) THEN
- v.InitModel(st(NewModels.Model));
- (* read view fields *)
- ELSE
- rd.TurnIntoAlien(Stores.alienComponent) (* cancel internalization of v *)
- END
- END
- END
- END Internalize;
- PROCEDURE (v: StdView) Externalize (VAR wr: Stores.Writer);
- BEGIN
- ASSERT(v.model # NIL, 20);
- v.Externalize^(wr);
- wr.WriteVersion(maxVersion);
- wr.WriteStore(v.model);
- (* write view fields *)
- END Externalize;
- PROCEDURE (v: StdView) CopyFrom (source: Views.View);
- BEGIN
- (*ASSERT(v not yet initialized, except for model, 20);*)
- ASSERT(source # NIL, 21);
- ASSERT(Stores.SameType(v, source), 23);
- ASSERT(v.model # NIL, 24);
- v.CopyFrom^(source);
- WITH source: StdView DO
- ASSERT(source.model # NIL, 22);
- (* copy view fields *)
- IF v.model # source.model THEN
- (*
- Check and possibly update or initialize v's state which refers to its model.
- Example: scroll position is set to a legal value, e.g. to the beginning
- *)
- END
- END
- END CopyFrom;
- PROCEDURE (v: StdView) InitModel (m: Models.Model);
- BEGIN
- ASSERT(m # NIL, 20);
- (*ASSERT(m already initialized, 21);*)
- ASSERT((v.model = NIL) OR (v.model = m), 22);
- ASSERT(m IS NewModels.Model, 23);
- v.model := m(NewModels.Model)
- END InitModel;
- PROCEDURE (v: StdView) ThisModel (): NewModels.Model;
- BEGIN
- ASSERT(v.model # NIL, 100);
- RETURN v.model
- END ThisModel;
- PROCEDURE (v: StdView) Restore (f: Views.Frame; l, t, r, b: LONGINT);
- VAR w, h: LONGINT;
- BEGIN
- (* restore foreground in rectangle (l, t, r, b) *)
- (* replace the body of this procedure with your Restore behavior *)
- v.context.GetSize(w, h);
- f.DrawLine(0, 0, w, h, f.dot, Ports.red)
- END Restore;
- PROCEDURE (v: StdView) HandleModelMsg (VAR msg: Models.Message);
- BEGIN
- ASSERT(msg.model # NIL, 20); ASSERT(msg.model = v.model, 21);
- WITH msg: Models.UpdateMsg DO
- WITH msg: NewModels.UpdateMsg DO
- (* calculate bounding box of area to restore, and then call
- Views.UpdateIn(v, l, t, r, b, Views.keepFrames)
- *)
- ELSE
- Views.Update(v, Views.keepFrames) (* restore v in any frame that displays it *)
- END
- ELSE (* ignore other messages *)
- END
- END HandleModelMsg;
- PROCEDURE (v: StdView) HandleCtrlMsg (f: Views.Frame; VAR msg: Controllers.Message;
- VAR focus: Views.View);
- BEGIN
- ASSERT(focus = NIL, 23);
- WITH msg: Controllers.PollOpsMsg DO
- (* specify which editing operations are supported *)
- | msg: Controllers.TrackMsg DO
- (* implement mouse tracking *)
- | msg: Controllers.EditMsg DO
- (* implement editing operations *)
- ELSE (* ignore other messages *)
- END
- END HandleCtrlMsg;
- PROCEDURE (v: StdView) HandlePropMsg (VAR p: Properties.Message);
- CONST defaultWidth = 100 * Ports.mm; defaultHeight = 70 * Ports.mm;
- BEGIN
- WITH p: Properties.FocusPref DO
- p.atLocation := FALSE; p.hotFocus := FALSE; p.setFocus := TRUE; p.selectOnFocus := TRUE
- | p: Properties.SizePref DO
- IF p.w = Views.undefined THEN p.w := defaultWidth END;
- IF p.h = Views.undefined THEN p.h := defaultHeight END
- ELSE (* ignore other messages *)
- END
- END HandlePropMsg;
- (* StdDirectory *)
- PROCEDURE (d: StdDirectory) New (m: NewModels.Model): View;
- VAR v: StdView;
- BEGIN
- ASSERT(m # NIL, 20);
- (*ASSERT(m already initialized, 21);*)
- NEW(v); v.InitModel(m);
- (* initialize view fields *)
- RETURN v
- END New;
- (** miscellaneous **)
- PROCEDURE Focus* (): View;
- VAR v: Views.View;
- BEGIN
- v := Controllers.FocusView();
- IF (v # NIL) & (v IS View) THEN RETURN v(View) ELSE RETURN NIL END
- END Focus;
- PROCEDURE FocusModel* (): NewModels.Model;
- VAR v: Views.View;
- BEGIN
- v := Controllers.FocusView();
- IF (v # NIL) & (v IS View) THEN RETURN v(View).ThisModel() ELSE RETURN NIL END
- END FocusModel;
- PROCEDURE New* (): View;
- BEGIN
- RETURN dir.New(NewModels.New())
- END New;
- PROCEDURE Deposit*;
- BEGIN
- Views.Deposit(New())
- END Deposit;
- PROCEDURE SetDir* (d: Directory);
- BEGIN
- ASSERT(d # NIL, 20);
- dir := d
- END SetDir;
- PROCEDURE Init;
- VAR d: StdDirectory;
- BEGIN
- NEW(d); stdDir := d; dir := d
- END Init;
- BEGIN
- Init
- END NewViews.
- TextControllers.StdCtrlDesc
- TextControllers.ControllerDesc
- Containers.ControllerDesc
- Controllers.ControllerDesc
- TextRulers.StdRulerDesc
- TextRulers.RulerDesc
- TextRulers.StdStyleDesc
- TextRulers.StyleDesc
- TextRulers.AttributesDesc
- Helvetica
- Documents.ControllerDesc
-